/**
 * 数据迁移脚本：为历史待审核数据补充 auto_publish_at 字段
 *
 * 功能：
 * 1. 查找所有 audit_status = 'PENDING' 且 auto_publish_at = NULL 的挂牌信息
 * 2. 根据 created_at + 30分钟 设置 auto_publish_at
 * 3. 输出迁移统计信息
 *
 * 执行方式：
 * node scripts/fix_auto_publish_at.js
 */

const { prisma } = require('../config/prisma');

async function fixAutoPublishAt() {
  console.log('========================================');
  console.log('开始修复历史待审核数据的 auto_publish_at 字段');
  console.log('========================================\n');

  try {
    // 1. 统计需要修复的数据
    const pendingCount = await prisma.listings.count({
      where: {
        audit_status: 'PENDING',
        auto_publish_at: null,
        audit_admin_id: null,
        audit_time: null
      }
    });

    console.log(`发现 ${pendingCount} 条待审核数据需要补充 auto_publish_at 字段\n`);

    if (pendingCount === 0) {
      console.log('✅ 没有需要修复的数据');
      return;
    }

    // 2. 查询所有需要修复的数据
    const pendingListings = await prisma.listings.findMany({
      where: {
        audit_status: 'PENDING',
        auto_publish_at: null,
        audit_admin_id: null,
        audit_time: null
      },
      select: {
        id: true,
        company_name: true,
        created_at: true
      }
    });

    console.log('开始更新数据...\n');

    // 3. 逐条更新数据
    let successCount = 0;
    let failedCount = 0;

    for (const listing of pendingListings) {
      try {
        // 计算 auto_publish_at = created_at + 30分钟
        const autoPublishAt = new Date(listing.created_at);
        autoPublishAt.setMinutes(autoPublishAt.getMinutes() + 30);

        await prisma.listings.update({
          where: { id: listing.id },
          data: { auto_publish_at: autoPublishAt }
        });

        successCount++;
        console.log(`✓ [${successCount}/${pendingCount}] ID: ${listing.id}, 公司: ${listing.company_name}`);
        console.log(`  创建时间: ${listing.created_at.toLocaleString('zh-CN')}`);
        console.log(`  自动发布时间: ${autoPublishAt.toLocaleString('zh-CN')}\n`);

      } catch (error) {
        failedCount++;
        console.error(`✗ 更新失败 - ID: ${listing.id}, 公司: ${listing.company_name}`);
        console.error(`  错误: ${error.message}\n`);
      }
    }

    // 4. 输出统计信息
    console.log('========================================');
    console.log('修复完成');
    console.log('========================================');
    console.log(`总数: ${pendingCount}`);
    console.log(`成功: ${successCount}`);
    console.log(`失败: ${failedCount}`);
    console.log('========================================\n');

    // 5. 验证修复结果
    const remainingCount = await prisma.listings.count({
      where: {
        audit_status: 'PENDING',
        auto_publish_at: null,
        audit_admin_id: null,
        audit_time: null
      }
    });

    if (remainingCount === 0) {
      console.log('✅ 所有待审核数据的 auto_publish_at 字段已成功补充');
    } else {
      console.log(`⚠️  仍有 ${remainingCount} 条数据未修复`);
    }

  } catch (error) {
    console.error('❌ 修复过程中发生错误:', error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

// 执行迁移
fixAutoPublishAt()
  .then(() => {
    console.log('\n脚本执行完成');
    process.exit(0);
  })
  .catch((error) => {
    console.error('\n脚本执行失败:', error);
    process.exit(1);
  });